The present application is related to the copending, commonly assigned application Ser. No. 08/644,317 entitled "Block Storage Memory List", which was filed on the same date as the present application and which is incorporated herein by reference.
Many types of memory storage devices are known, such as flash random access memory (RAM) cards and multigigabyte disk arrays, each with different interfaces. All of these devices share common characteristics that can be abstracted out into a single interface which effectively hides the differences between the device interfaces. Additionally, many different partitioning formats can be used to describe how each device is divided into sub-devices; the details of these partitioning formats can be abstracted to form a single interface.
A block storage memory system provides the abstractions and single interface to avoid the need to compensate for different device interfaces and partitioning formats. This allows for the easy addition and qualification of new devices and partitioning formats.
Specifically, a block storage memory system abstracts the different characteristics of real, physical, storage devices to provide a single, consistent interface to "virtual" storage devices which are abstract representations of physical storage devices. The block storage memory system partitions and aggregates storage devices to create a virtual device of the appropriate size for an application.
Known block storage models and interfaces are typically directed to disk and disk-like devices with random-access capabilities.
A typical block storage system includes virtual storage devices, multiple auto-recognized partitioning formats and automated media changers.
Virtual storage devices, or "stores", are abstract representations of real disk devices. They provide a relatively simple but powerful interface of randomly accessible fixed-sized "blocks" of data. The blocks of data in a store must be stored somewhere, either in a real device or in one or more other stores. Of course, the chain of virtual devices must ultimately include a store attached to a real device or the data could not be stored.
If the only option were for a virtual store to have a 1-to-1 mapping of blocks to its parent store, virtual stores would have limited utility. However, a store can be mapped to a portion of another store or multiple stores can be aggregated together and mapped into a single store. The relationship between stores and between a store and a physical device is referred to as a "mapping." The algorithm used to perform the mapping is changeable and is typically provided by a simple "mapping plug-in" module associated with each store. Using different algorithms to map the blocks allows for the software implementation of devices such as RAID (redundant array of independent disks) or encrypted devices. As will be appreciated by those skilled in the art, RAID is a storage technology in which an array of disks appear to a user to be equivalent to a single disk. By scattering data across a number of individual disks, and storing redundancy information separately from the data, the system can continue to function without loss of data if an individual disk in the array fails. The redundancy information can be a copy of the data or other information that can be used to reconstruct data stored on failed disk. RAID technology is described in more detail in "The RAID Primer" (1994) published by the RAID Advisory Board, Inc. St. Peter, Minn., which is incorporated herein by reference.
Partition maps are simple databases of a virtual device that describe how the virtual device is partitioned into sub-devices. There are many known partition map formats, and often a partition map format is more closely related to a specific machine or operating system than a file system format; many operating systems support multiple file system formats but few support multiple partitioning formats. Most operating systems can use the information in a partition map to produce a number of virtual devices corresponding to the partitions described in the map. Most operating systems, however, allow only this two-level hierarchy of physical devices and virtual devices. Partition maps are typically implemented by a single integrated disk or device driver and partition manager. The partition manager includes partition code which enables the partition to read the partition map data and perform the necessary partitioning. The conventional integrated device driver and partition manager requires significant amounts of partition code to be copied and stored in each partitioned storage device, reducing the efficiency of the memory system.
Input/output (I/O) operations in a computer system are typically performed between an I/O device and some portion of the system memory. There is currently no standard way for a user-level application to determine a particular portion of the memory involved in an I/O operation. Memory lists are abstract lists of data created from a set of address ranges defining a subset of a memory range. Each item in a memory list represents an address or address range in the memory range. Memory lists are used to store and retrieve physical and virtual page addresses for performing I/O operations. Typically, I/O operations in a block storage memory system are performed by remapping the items in the memory list to generate physical addresses necessary to perform the I/O operation. If the memory system includes data scattered across several physical devices, such as in a RAID storage system described above, the memory list must necessarily be copied for each physical memory device containing data addresses included in each memory list. It will be appreciated that as the complexity of the block storage memory system increases, extensive remappings and copying of memory lists will typically be required, thereby decreasing the speed and efficiency of the memory system. It would be desirable to reduce the need for copying and remapping, and thereby improve the performance of the system.